<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/assoc_array.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/assoc_array.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="k">/* Generic associative array implementation.</span>
<a name="2" /><span class="True">       2:</span> <span class="k"> *</span>
<a name="3" /><span class="True">       3:</span> <span class="k"> * See Documentation/assoc_array.txt for information.</span>
<a name="4" /><span class="True">       4:</span> <span class="k"> *</span>
<a name="5" /><span class="True">       5:</span> <span class="k"> * Copyright (C) 2013 Red Hat, Inc. All Rights Reserved.</span>
<a name="6" /><span class="True">       6:</span> <span class="k"> * Written by David Howells (dhowells@redhat.com)</span>
<a name="7" /><span class="True">       7:</span> <span class="k"> *</span>
<a name="8" /><span class="True">       8:</span> <span class="k"> * This program is free software; you can redistribute it and/or</span>
<a name="9" /><span class="True">       9:</span> <span class="k"> * modify it under the terms of the GNU General Public Licence</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> * as published by the Free Software Foundation; either version</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> * 2 of the Licence, or (at your option) any later version.</span>
<a name="12" /><span class="True">      12:</span> <span class="k"> */</span>
<a name="13" /><span class="True">      13:</span> 
<a name="14" /><span class="True">      14:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX0FTU09DX0FSUkFZX0hfMA__"><span class="b">_LINUX_ASSOC_ARRAY_H</span></a>
<a name="15" /><span class="True">      15:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX0FTU09DX0FSUkFZX0hfMA__"><span class="b">_LINUX_ASSOC_ARRAY_H</span></a>
<a name="16" /><span class="True">      16:</span> 
<a name="17" /><span class="True">      17:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX0FTU09DSUFUSVZFX0FSUkFZXzA_"><span class="b">CONFIG_ASSOCIATIVE_ARRAY</span></a>
<a name="18" /><span class="True">      18:</span> 
<a name="19" /><span class="True">      19:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="20" /><span class="True">      20:</span> 
<a name="21" /><span class="True">      21:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_QVNTT0NfQVJSQVlfS0VZX0NIVU5LX1NJWkVfMA__"><span class="b">ASSOC_ARRAY_KEY_CHUNK_SIZE</span></a> <a href="cpu.c_macros_ref.html#_QklUU19QRVJfTE9OR18w"><span class="b">BITS_PER_LONG</span></a> <span class="k">/* Key data retrieved in chunks of this size */</span>
<a name="22" /><span class="True">      22:</span> 
<a name="23" /><span class="True">      23:</span> <span class="k">/*</span>
<a name="24" /><span class="True">      24:</span> <span class="k"> * Generic associative array.</span>
<a name="25" /><span class="True">      25:</span> <span class="k"> */</span>
<a name="26" /><span class="True">      26:</span> <span class="m">struct</span> <span class="b">assoc_array</span> <span class="f">{</span>
<a name="27" /><span class="True">      27:</span>     <span class="m">struct</span> <span class="b">assoc_array_ptr</span>    <span class="f">*</span><span class="b">root</span><span class="f">;</span>        <span class="k">/* The node at the root of the tree */</span>
<a name="28" /><span class="True">      28:</span>     <span class="m">unsigned</span> <span class="m">long</span>        <span class="b">nr_leaves_on_tree</span><span class="f">;</span>
<a name="29" /><span class="True">      29:</span> <span class="f">}</span><span class="f">;</span>
<a name="30" /><span class="True">      30:</span> 
<a name="31" /><span class="True">      31:</span> <span class="k">/*</span>
<a name="32" /><span class="True">      32:</span> <span class="k"> * Operations on objects and index keys for use by array manipulation routines.</span>
<a name="33" /><span class="True">      33:</span> <span class="k"> */</span>
<a name="34" /><span class="True">      34:</span> <span class="m">struct</span> <span class="b">assoc_array_ops</span> <span class="f">{</span>
<a name="35" /><span class="True">      35:</span>     <span class="k">/* Method to get a chunk of an index key from caller-supplied data */</span>
<a name="36" /><span class="True">      36:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="f">(</span><span class="f">*</span><span class="b">get_key_chunk</span><span class="f">)</span><span class="f">(</span><span class="m">const</span> <span class="m">void</span> <span class="f">*</span><span class="b">index_key</span><span class="f">,</span> <span class="m">int</span> <span class="b">level</span><span class="f">)</span><span class="f">;</span>
<a name="37" /><span class="True">      37:</span> 
<a name="38" /><span class="True">      38:</span>     <span class="k">/* Method to get a piece of an object&apos;s index key */</span>
<a name="39" /><span class="True">      39:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="f">(</span><span class="f">*</span><span class="b">get_object_key_chunk</span><span class="f">)</span><span class="f">(</span><span class="m">const</span> <span class="m">void</span> <span class="f">*</span><span class="b">object</span><span class="f">,</span> <span class="m">int</span> <span class="b">level</span><span class="f">)</span><span class="f">;</span>
<a name="40" /><span class="True">      40:</span> 
<a name="41" /><span class="True">      41:</span>     <span class="k">/* Is this the object we&apos;re looking for? */</span>
<a name="42" /><span class="True">      42:</span>     <span class="m">bool</span> <span class="f">(</span><span class="f">*</span><span class="b">compare_object</span><span class="f">)</span><span class="f">(</span><span class="m">const</span> <span class="m">void</span> <span class="f">*</span><span class="b">object</span><span class="f">,</span> <span class="m">const</span> <span class="m">void</span> <span class="f">*</span><span class="b">index_key</span><span class="f">)</span><span class="f">;</span>
<a name="43" /><span class="True">      43:</span> 
<a name="44" /><span class="True">      44:</span>     <span class="k">/* How different is an object from an index key, to a bit position in</span>
<a name="45" /><span class="True">      45:</span> <span class="k">     * their keys? (or -1 if they&apos;re the same)</span>
<a name="46" /><span class="True">      46:</span> <span class="k">     */</span>
<a name="47" /><span class="True">      47:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">diff_objects</span><span class="f">)</span><span class="f">(</span><span class="m">const</span> <span class="m">void</span> <span class="f">*</span><span class="b">object</span><span class="f">,</span> <span class="m">const</span> <span class="m">void</span> <span class="f">*</span><span class="b">index_key</span><span class="f">)</span><span class="f">;</span>
<a name="48" /><span class="True">      48:</span> 
<a name="49" /><span class="True">      49:</span>     <span class="k">/* Method to free an object. */</span>
<a name="50" /><span class="True">      50:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">free_object</span><span class="f">)</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="b">object</span><span class="f">)</span><span class="f">;</span>
<a name="51" /><span class="True">      51:</span> <span class="f">}</span><span class="f">;</span>
<a name="52" /><span class="True">      52:</span> 
<a name="53" /><span class="True">      53:</span> <span class="k">/*</span>
<a name="54" /><span class="True">      54:</span> <span class="k"> * Access and manipulation functions.</span>
<a name="55" /><span class="True">      55:</span> <span class="k"> */</span>
<a name="56" /><span class="True">      56:</span> <span class="m">struct</span> <span class="b">assoc_array_edit</span><span class="f">;</span>
<a name="57" /><span class="True">      57:</span> 
<a name="58" /><span class="True">      58:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">assoc_array_init</span><span class="f">(</span><span class="m">struct</span> <span class="b">assoc_array</span> <span class="f">*</span><span class="b">array</span><span class="f">)</span>
<a name="59" /><span class="True">      59:</span> <span class="f">{</span>
<a name="60" /><span class="True">      60:</span>     <span class="b">array</span><span class="f">-&gt;</span><span class="b">root</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">;</span>
<a name="61" /><span class="True">      61:</span>     <span class="b">array</span><span class="f">-&gt;</span><span class="b">nr_leaves_on_tree</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>
<a name="62" /><span class="True">      62:</span> <span class="f">}</span>
<a name="63" /><span class="True">      63:</span> 
<a name="64" /><span class="True">      64:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">assoc_array_iterate</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">assoc_array</span> <span class="f">*</span><span class="b">array</span><span class="f">,</span>
<a name="65" /><span class="True">      65:</span>                    <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">iterator</span><span class="f">)</span><span class="f">(</span><span class="m">const</span> <span class="m">void</span> <span class="f">*</span><span class="b">object</span><span class="f">,</span>
<a name="66" /><span class="True">      66:</span>                            <span class="m">void</span> <span class="f">*</span><span class="b">iterator_data</span><span class="f">)</span><span class="f">,</span>
<a name="67" /><span class="True">      67:</span>                    <span class="m">void</span> <span class="f">*</span><span class="b">iterator_data</span><span class="f">)</span><span class="f">;</span>
<a name="68" /><span class="True">      68:</span> <span class="m">extern</span> <span class="m">void</span> <span class="f">*</span><span class="b">assoc_array_find</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">assoc_array</span> <span class="f">*</span><span class="b">array</span><span class="f">,</span>
<a name="69" /><span class="True">      69:</span>                   <span class="m">const</span> <span class="m">struct</span> <span class="b">assoc_array_ops</span> <span class="f">*</span><span class="b">ops</span><span class="f">,</span>
<a name="70" /><span class="True">      70:</span>                   <span class="m">const</span> <span class="m">void</span> <span class="f">*</span><span class="b">index_key</span><span class="f">)</span><span class="f">;</span>
<a name="71" /><span class="True">      71:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">assoc_array_destroy</span><span class="f">(</span><span class="m">struct</span> <span class="b">assoc_array</span> <span class="f">*</span><span class="b">array</span><span class="f">,</span>
<a name="72" /><span class="True">      72:</span>                 <span class="m">const</span> <span class="m">struct</span> <span class="b">assoc_array_ops</span> <span class="f">*</span><span class="b">ops</span><span class="f">)</span><span class="f">;</span>
<a name="73" /><span class="True">      73:</span> <span class="m">extern</span> <span class="m">struct</span> <span class="b">assoc_array_edit</span> <span class="f">*</span><span class="b">assoc_array_insert</span><span class="f">(</span><span class="m">struct</span> <span class="b">assoc_array</span> <span class="f">*</span><span class="b">array</span><span class="f">,</span>
<a name="74" /><span class="True">      74:</span>                            <span class="m">const</span> <span class="m">struct</span> <span class="b">assoc_array_ops</span> <span class="f">*</span><span class="b">ops</span><span class="f">,</span>
<a name="75" /><span class="True">      75:</span>                            <span class="m">const</span> <span class="m">void</span> <span class="f">*</span><span class="b">index_key</span><span class="f">,</span>
<a name="76" /><span class="True">      76:</span>                            <span class="m">void</span> <span class="f">*</span><span class="b">object</span><span class="f">)</span><span class="f">;</span>
<a name="77" /><span class="True">      77:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">assoc_array_insert_set_object</span><span class="f">(</span><span class="m">struct</span> <span class="b">assoc_array_edit</span> <span class="f">*</span><span class="b">edit</span><span class="f">,</span>
<a name="78" /><span class="True">      78:</span>                       <span class="m">void</span> <span class="f">*</span><span class="b">object</span><span class="f">)</span><span class="f">;</span>
<a name="79" /><span class="True">      79:</span> <span class="m">extern</span> <span class="m">struct</span> <span class="b">assoc_array_edit</span> <span class="f">*</span><span class="b">assoc_array_delete</span><span class="f">(</span><span class="m">struct</span> <span class="b">assoc_array</span> <span class="f">*</span><span class="b">array</span><span class="f">,</span>
<a name="80" /><span class="True">      80:</span>                            <span class="m">const</span> <span class="m">struct</span> <span class="b">assoc_array_ops</span> <span class="f">*</span><span class="b">ops</span><span class="f">,</span>
<a name="81" /><span class="True">      81:</span>                            <span class="m">const</span> <span class="m">void</span> <span class="f">*</span><span class="b">index_key</span><span class="f">)</span><span class="f">;</span>
<a name="82" /><span class="True">      82:</span> <span class="m">extern</span> <span class="m">struct</span> <span class="b">assoc_array_edit</span> <span class="f">*</span><span class="b">assoc_array_clear</span><span class="f">(</span><span class="m">struct</span> <span class="b">assoc_array</span> <span class="f">*</span><span class="b">array</span><span class="f">,</span>
<a name="83" /><span class="True">      83:</span>                           <span class="m">const</span> <span class="m">struct</span> <span class="b">assoc_array_ops</span> <span class="f">*</span><span class="b">ops</span><span class="f">)</span><span class="f">;</span>
<a name="84" /><span class="True">      84:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">assoc_array_apply_edit</span><span class="f">(</span><span class="m">struct</span> <span class="b">assoc_array_edit</span> <span class="f">*</span><span class="b">edit</span><span class="f">)</span><span class="f">;</span>
<a name="85" /><span class="True">      85:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">assoc_array_cancel_edit</span><span class="f">(</span><span class="m">struct</span> <span class="b">assoc_array_edit</span> <span class="f">*</span><span class="b">edit</span><span class="f">)</span><span class="f">;</span>
<a name="86" /><span class="True">      86:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">assoc_array_gc</span><span class="f">(</span><span class="m">struct</span> <span class="b">assoc_array</span> <span class="f">*</span><span class="b">array</span><span class="f">,</span>
<a name="87" /><span class="True">      87:</span>               <span class="m">const</span> <span class="m">struct</span> <span class="b">assoc_array_ops</span> <span class="f">*</span><span class="b">ops</span><span class="f">,</span>
<a name="88" /><span class="True">      88:</span>               <span class="m">bool</span> <span class="f">(</span><span class="f">*</span><span class="b">iterator</span><span class="f">)</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="b">object</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">iterator_data</span><span class="f">)</span><span class="f">,</span>
<a name="89" /><span class="True">      89:</span>               <span class="m">void</span> <span class="f">*</span><span class="b">iterator_data</span><span class="f">)</span><span class="f">;</span>
<a name="90" /><span class="True">      90:</span> 
<a name="91" /><span class="True">      91:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_ASSOCIATIVE_ARRAY */</span>
<a name="92" /><span class="True">      92:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _LINUX_ASSOC_ARRAY_H */</span>
<a name="93" /><span class="True">      93:</span> </pre>
  </body>
</html>
